package com.jsoft.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.jsoft.entity.Enterprise;
import com.jsoft.entity.Job;
import com.jsoft.dao.JobDao;
import com.jsoft.entity.JobAndEnterpriseAndIndustry;
import com.jsoft.entity.PageBean;
import com.jsoft.service.JobService;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;

import javax.annotation.Resource;
import java.util.List;

/**
 * (Job)表服务实现类
 *
 * @author makejava
 * @since 2025-03-14 23:30:25
 */
@Service("jobService")
public class JobServiceImpl implements JobService {
    @Resource
    private JobDao jobDao;

    /**
     * 查询我的职位
     * @param jobName 职位名
     * @param userId 用户id
     * @param page 第几页
     * @param size 一页多少条
     * @return 查询结果
     */
    @Override
    public List<JobAndEnterpriseAndIndustry> getMyJobs(String jobName, String userId, int page, int size) {
        int offset = (page - 1) * size; // 计算偏移量
        return jobDao.getMyJobs(jobName, userId, offset, size);
    }

    /**
     * 三表联查
     *
     * @param jobName 前端传的职位关键字
     * @param page    第几页，1开始
     * @param size    一页多少条
     * @return 查询结果
     */
    @Override
    public List<JobAndEnterpriseAndIndustry> selectJobAndEnterpriseAndIndustry(String jobName, int page, int size) {
        int offset = (page - 1) * size; // 计算偏移量
        return jobDao.selectJobAndEnterpriseAndIndustry(jobName, offset, size);
    }

    /**
     * 查询名为该职位名的职位共有多少条
     * @param jobName 职位名
     * @return 查询结果
     */
    @Override
    public int countJobs(String jobName) {
        return jobDao.countJobs(jobName);
    }

    /**
     * 我的职位页面的计数
     * @param jobName 职位名
     * @param userId 用户id
     * @return 查询结果
     */
    @Override
    public int countMyJobs(String jobName, String userId) {
        return jobDao.countMyJobs(jobName, userId);
    }

    /**
     * 放到下拉菜单里的职位名们
     *
     * @return 查询结果
     */
    @Override
    public List<Job> getJobNames() {
        return jobDao.selectJobNames();
    }

    /**
     * 根据企业id查询该企业的职位
     * @param enterpriseId 企业id
     * @return 查询结果
     */
    @Override
    public List<Job> getJobsByEnterpriseId(Integer enterpriseId) {
        return jobDao.getJobsByEnterpriseId(enterpriseId);
    }

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public Job queryById(Integer id) {
        return this.jobDao.queryById(id);
    }

    /**
     * 分页查询
     *
     * @param job         筛选条件
     * @param pageRequest 分页对象
     * @return 查询结果
     */
    @Override
    public Page<Job> queryByPage(Job job, PageRequest pageRequest) {
        long total = this.jobDao.count(job);
        return new PageImpl<>(this.jobDao.queryAllByLimit(job, pageRequest), pageRequest, total);
    }

    /**
     * 新增数据
     *
     * @param job 实例对象
     * @return 实例对象
     */
    @Override
    public Job insert(Job job) {
        this.jobDao.insert(job);
        return job;
    }

    /**
     * 修改数据
     *
     * @param job 实例对象
     * @return 实例对象
     */
    @Override
    public Job update(Job job) {
        this.jobDao.update(job);
        return this.queryById(job.getId());
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer id) {
        return this.jobDao.deleteById(id) > 0;
    }

    /**
     * 查询高薪工作
     *
     * @return
     */
    @Override
    public PageBean<Job> list(Integer pageNum, Integer pageSize) {
        // 使用 PageHelper 分页
        PageHelper.startPage(pageNum, pageSize);
        List<Job> list = jobDao.list();

        // 将结果包装为 PageInfo
        PageInfo<Job> pageInfo = new PageInfo<>(list);

        // 转换为自定义的 PageBean
        PageBean<Job> pb = new PageBean<>();
        pb.setTotal(pageInfo.getTotal()); // 总记录数
        pb.setItems(pageInfo.getList());  // 当前页数据
        return pb;
    }

    @Override
    public PageBean<Enterprise> queryId(Integer pageNum, Integer pageSize, Integer id) {
        // 使用 PageHelper 分页
        PageHelper.startPage(pageNum, pageSize);
        List<Enterprise> list = jobDao.queryId(id);

        // 将结果包装为 PageInfo
        PageInfo<Enterprise> pageInfo = new PageInfo<>(list);

        // 转换为自定义的 PageBean
        PageBean<Enterprise> pb = new PageBean<>();
        pb.setTotal(pageInfo.getTotal()); // 总记录数
        pb.setItems(pageInfo.getList());  // 当前页数据
        return pb;
    }

    @Override
    public PageBean<Job> queryJobById(Integer pageNum, Integer pageSize, Integer id) {
        // 使用 PageHelper 分页
        PageHelper.startPage(pageNum, pageSize);
        List<Job> list = jobDao.queryJobById(id);

        // 将结果包装为 PageInfo
        PageInfo<Job> pageInfo = new PageInfo<>(list);

        // 转换为自定义的 PageBean
        PageBean<Job> pb = new PageBean<>();
        pb.setTotal(pageInfo.getTotal()); // 总记录数
        pb.setItems(pageInfo.getList());  // 当前页数据
        return pb;
    }

    @Override
    public PageBean<Job> jobByIndustryId(Integer pageNum, Integer pageSize, Integer id) {
        // 使用 PageHelper 分页
        PageHelper.startPage(pageNum, pageSize);
        List<Job> list = jobDao.jobByIndustryId(id);

        // 将结果包装为 PageInfo
        PageInfo<Job> pageInfo = new PageInfo<>(list);

        // 转换为自定义的 PageBean
        PageBean<Job> pb = new PageBean<>();
        pb.setTotal(pageInfo.getTotal()); // 总记录数
        pb.setItems(pageInfo.getList());  // 当前页数据
        return pb;
    }


}
